package com.weiqk.pmdemo.excel;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import com.weiqk.pmdemo.pojo.Project;
import com.weiqk.pmdemo.service.ProjectService;

import java.util.ArrayList;
import java.util.List;

// 有个很重要的点 DemoDataListener 不能被spring管理，要每次读取excel都要new,然后里面用到spring可以构造方法传进去
public class ExcelListener<T> extends AnalysisEventListener<T> {

    private static final int BATCH_COUNT = 5;
    List<T> list = new ArrayList<T>();
    private ProjectService projectService;
    // 此处可传Spring IOC对象进行保存数据库

    /**
     * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
     *
     * @param projectService
     */
    public ExcelListener(ProjectService projectService) {
        this.projectService = projectService ;
    }
    // 读取每一条
    @Override
    public void invoke(T data, AnalysisContext context) {
        System.out.println(JSON.toJSONString(data));
        list.add(data);

        if (list.size() >= BATCH_COUNT) {
            saveData();
            // 存储完成清理 list
            list.clear();
        }
        list.add(data);
    }

    // 读取完毕后
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        System.out.println("读取完成！");
        saveData();
        list.clear();
    }

    // 保存操作
    private void saveData(){
        projectService.saveAll((List<Project>) list);
//        for (T p:list){
//            projectService.put((Project) p);
//        }

        System.out.println("存入数据库");
    }
}